
// promise可以解决链式调用问题 jquery .then.then
// 先通过原生看效果 -> 写原理

let promise = new Promise((resolve, reject) => {
  resolve('hello') // 普通值意味着不是一个promise
})

promise.then( data => {
  console.log(data)
  return data // then方法中可以返回一个值（不是promise）， 会把这个结果放到下一次then的成功的回调中
}).then(data => {
  console.log('--then2--')
  console.log(data)
  return new Promise((resolve, reject) => { // 如果返回的事一个promise 那么会采用这个promise的结果
    setTimeout(() => {
      resolve('hello2')
    }, 1000)
  }) 
}).then(data => {
  console.log('--then3--')
  console.log(data)
  return new Promise((resolve, reject) => { // 如果返回的事一个promise 那么会采用这个promise的结果
    setTimeout(() => {
      reject('world')
    }, 1000)
  }) 
}).then(data => {
  console.log('--then4--')
  console.log(data)
}, err =>{
  // 如果在失败的函数中返回的事普通值或者是成功的promise也会走到外层的promise的成功中
  console.log('----err--') 
  console.log(err)
  // return undefined
}).then(data => {
  console.log('--成功--')
  console.log(data) // undefined
  throw new Error('失败了')
}, err =>{
  console.log('----err5--')
  console.log(err) 
}).then(data => {

}, err =>{
  console.log('----err6--')
  console.log(err) 
}).catch((e) => { //捕获异常 先找距离自己最近的如果没有错误捕获 会找到最终的catch方法
  console.log('----catch---')
  console.log(e)
})

// 什么时候走成功 then中返回的事一个普通值 或者是一个promise的时候（成功的promise）
// 什么情况 返回的事一个失败的promise、抛出异常也会走失败

// catch的特点是如果都没有错误处理（一层层找）没有找到错误处理 会找最近的catch， catch也是then 遵循then的规则
// .then.then 并不是和jquery一样  返回this
// promise中实现链式调用 主要是靠着是返回一个新的promise




